package gemsa.modeles;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.sql.DataSource;
import java.text.SimpleDateFormat;
import gemsa.beans.Reponse;
import gemsa.beans.Question;
import gemsa.outils.GestionBaseDeDonnees;
import gemsa.modeles.ModeleQuestion;


/**
 * Classe ModeleReponseProjet
 * @author Projet Dev Groupe 33
 * @version 1.0
 */
 
public class ModeleReponseProjet 
{
	// Variables
	DataSource datasource=null;
	Connection connexion=null;
	ResultSet resultat=null;
	
	// Constructeur
	public ModeleReponseProjet(DataSource datasource)
	{		
		this.datasource=datasource;
	}
	
	
	// Récupérer une reponse
	public Reponse getReponse(int idReponse)
	{	
		// Variables
		PreparedStatement requete=null;
		Reponse reponse=null;
		String requeteString=null;
	
		try
		{			
			// Ouverture d'une connexion
			connexion=datasource.getConnection();
			
			// Cr�ation de la requête
			requeteString="SELECT * FROM reponseprojet WHERE id_reponseprojet =?";
			
			// On pr�pare la requête
			requete=connexion.prepareStatement(requeteString);
			requete.setInt(1,idReponse);
				
			// Execution de la requête
			resultat = requete.executeQuery();

			// On stocke le resultat dans l'objet reponse
			if(resultat!=null)
			{
				if(resultat.next())
				{
					// On effectue le mapping des attributs avec les champs de la table SQL
					reponse=reponseAttributsMapper(resultat);
				}
			}
		}
		catch(Exception e)
		{
			// L'id de la reponse n'exite pas, on initialise la reponse � null
			reponse=null;
			System.out.println("Erreur dans la requete dans la classe ModeleReponseProjet fonction getReponse");
		}
		finally
		{
			try
			{
				// Fermeture de la connexion
				if(resultat!=null)
				{
					GestionBaseDeDonnees.closeResulset(resultat);
				}
				if(requete!=null)
				{
					GestionBaseDeDonnees.closeRequest(requete);
				}
				if(connexion!=null)
				{
					GestionBaseDeDonnees.closeConnection(connexion);
				}
			}
			catch(Exception ex)
			{
				System.out.println("Erreur lors de la fermeture de la connexion avec la base de donn�es dans la classe ModeleReponseProjet fonction getReponse");
			}	
		}
		
		// Retourner l'reponse
		return reponse;
	}
	
	
	// R�aliser la transformation Relationnel vers Objet
	public Reponse reponseAttributsMapper(ResultSet resultat)
	{
		// Variables
		Reponse reponse=null;
		ModeleQuestion modeleQuestion=null;
		ModeleNote modeleNote=null;
		
		// Initialisation des mod�les
		modeleQuestion=new ModeleQuestion(this.datasource);
		modeleNote=new ModeleNote(this.datasource);
		
		// Initalisation de l'objet reponse
		reponse=new Reponse();
		
		try
		{	
			// On renseigne l'objet reponse
			if(resultat.getString("id_reponseprojet")==null)
			{
				reponse.setId(0);
			}
			else
			{
				reponse.setId(resultat.getInt("id_reponseprojet"));
			}
			
			if(resultat.getString("referencereponse")==null)
			{
				reponse.setReference(0);
			}
			else
			{
				reponse.setReference(resultat.getInt("referencereponse"));
			}
			
			if(resultat.getString("nomreponse")==null)
			{
				reponse.setNom("");
			}
			else
			{
				reponse.setNom(resultat.getString("nomreponse"));
			}
			
			if(resultat.getString("descriptionreponse")==null)
			{
				reponse.setDescription("");
			}
			else
			{
				reponse.setDescription(resultat.getString("descriptionreponse"));
			}
		
			if(resultat.getString("coefficientreponse")==null)
			{
				reponse.setCoefficient(0.0);
			}
			else
			{
				reponse.setCoefficient((resultat.getDouble("coefficientreponse")));
			}
			
			if(resultat.getString("etatreponse")==null)
			{
				
				reponse.setEtat(0);
			}
			else
			{
				reponse.setEtat(resultat.getInt("etatreponse"));
			}
			
			if(resultat.getString("id_question")==null)
			{
				reponse.setQuestion(new Question());
			}
			else
			{
				reponse.setQuestion(modeleQuestion.getQuestion(resultat.getInt("id_question")));
			}
			
			// On récupère la note de la reponse
			reponse.setNote(modeleNote.getNoteReponse(reponse.getId()));
			
		}
		catch (Exception e) 
		{
			System.out.println(e);
			// Si il y a une erreur durant le mapping des attributs avec la base on renvoi un objet null
			reponse=null;
			System.out.println("Erreur lors du mappage des attributs d'un reponses dans la classe ModeleReponseProjet fonction ReponseAttributsMapper");
		}
		
		// On retourne la reponse
		return reponse;
	}
	
	
}
